// 认证相关工具函数
import { useTokenStore } from '@/stores/token.js'
import { useAdminStore } from '@/stores/admin.js'
import { ElMessage } from 'element-plus'
import router from '@/router'

/**
 * 检查是否已登录
 * @returns {boolean} 是否已登录
 */
export const isAuthenticated = () => {
  const tokenStore = useTokenStore()
  const adminStore = useAdminStore()
  
  return tokenStore.hasToken() && adminStore.isLoggedIn()
}

/**
 * 处理登录失效的统一方法
 * @param {string} message 错误消息，默认为"登录已失效，请重新登录"
 */
export const handleAuthExpired = (message = '登录已失效，请重新登录') => {
  const adminStore = useAdminStore()
  
  // 清除所有登录状态
  adminStore.logout()
  
  // 显示错误消息
  ElMessage.error(message)
  
  // 跳转到登录页面
  router.push('/login')
}

/**
 * 获取当前登录的管理员信息
 * @returns {Object|null} 管理员信息对象或null
 */
export const getCurrentAdmin = () => {
  const adminStore = useAdminStore()
  return adminStore.getAdminInfo()
}

/**
 * 检查token是否即将过期
 * @param {number} beforeMinutes 在过期前多少分钟提醒，默认为5分钟
 * @returns {boolean} 是否即将过期
 */
export const isTokenExpiringSoon = (beforeMinutes = 5) => {
  const tokenStore = useTokenStore()
  
  if (!tokenStore.hasToken()) {
    return false
  }
  
  try {
    // 如果token是JWT格式，可以解析过期时间
    const token = tokenStore.token
    const base64Url = token.split('.')[1]
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
    const payload = JSON.parse(window.atob(base64))
    
    if (payload.exp) {
      const expirationTime = payload.exp * 1000 // 转换为毫秒
      const currentTime = Date.now()
      const timeLeft = expirationTime - currentTime
      const minutesLeft = timeLeft / (1000 * 60)
      
      return minutesLeft <= beforeMinutes && minutesLeft > 0
    }
  } catch (error) {
    console.warn('无法解析token过期时间:', error)
  }
  
  return false
}

/**
 * 自动刷新token（如果后端支持）
 * @returns {Promise<boolean>} 是否刷新成功
 */
export const refreshToken = async () => {
  // 这里可以实现token刷新逻辑
  // 如果后端支持refresh token的话
  console.log('Token刷新功能待实现')
  return false
} 